package com.cheer.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.cheer.common.Page;
import com.cheer.dto.MallProductAddDTO;
import com.cheer.dto.MallProductQueryDTO;
import com.cheer.dto.MallProductUpdateDTO;
import com.cheer.entity.MallProductEntity;
import com.cheer.vo.*;

import java.util.List;

/**
 * 商品表
 *
 * @author cheer
 */
public interface MallProductService extends IService<MallProductEntity> {

    /**
     * 查询商品分页列表
     */
    Page<MallProductListVO> listByQueryCondition(MallProductQueryDTO productQueryDTO);

    /**
     * 创建商品
     */
    void add(MallProductAddDTO productAddDTO);

    /**
     * 查询商品详情
     */
    MallProductInfoVO info(Long id);

    /**
     * 修改商品
     */
    void update(MallProductUpdateDTO productUpdateDTO);

    /**
     * 删除商品
     */
    void delete(List<Long> ids);

    /**
     * 审核商品
     * id 商品ID
     */
    void review(Long id);

    /**
     * 下架商品
     */
    void remove(Long id);

    /**
     * 查询上架和下架商品总数
     */
    Integer passedAndRemovedCount();

    /**
     * 待审核商品总数
     */
    Integer reviewCount();

    /**
     * 商户指定状态商品数量
     */
    Integer countByShopIdAndStatus(Long shopId, Integer publishStatus);

    /**
     * 查询商品简要信息
     */
    List<SimpleObjectVO> listProductSimpleByIds(List<Long> ids);

    /**
     * 查询上架商品简要信息
     */
    List<SimpleObjectVO> listPassed();

    /**
     * 查询商城首页产品列表
     */
    Page<MallProductFrontListVO> listByCategoryId(Integer pageNum, Integer pageSize, Long categoryId);

    /**
     * 关键词搜索商城产品列表
     */
    Page<MallProductFrontListVO> search(Integer pageNum, Integer pageSize, String keyword);

    /**
     * 查询商城产品详情
     */
    MallProductFrontInfoVO frontInfo(Long id);

    /**
     * 减库存
     */
    Boolean minusStock(Long id, Integer quantity);

    /**
     * 查看使用方法
     */
    MallProductEntity getMethodById(Long id);

    /**
     * 查看店铺商品
     */
    void deleteByShopIds(List<Long> shopIds);

    /**
     * 增加库存
     */
    void addStock(Long id, Integer quantity);

    /**
     * 根据商户ID查询产品
     * @param dxxShopId
     * @return
     */
    List<MallProductEntity> listByShopId(Long dxxShopId);


    void updateIsBookStock(Long productId, int status);


}

